获取串口设备友好名称(FriendlyName)

您所在的位置:网站首页 设备管理器设置串口中 Maximum Read是什么意思 获取串口设备友好名称(FriendlyName)

获取串口设备友好名称(FriendlyName)

2024-07-10 02:25| 来源: 网络整理| 查看: 265

文章目录 前言一、获取串口设备的友好名称代码实现部分1.1加入头文件1.2相关代码实现 二、增加组合框下拉列表的宽度2.1 未增加组合框下拉列表的宽度效果如下图所示2.2 增加组合框下拉列表的宽度效果如下图所示 三、获取串口号(COMX)

前言

我们平常在使用串口设备时,第一步就要打开串口,这时候就需要获取串口设备的COM端口号。一般网上的方法就是通过注册表方法获取串口号,并不能获取串口设备友好名称,对于操作串口设备来说并不方便。下面介绍一种方法获取USB转串口设备的友好名称。

一、获取串口设备的友好名称代码实现部分

编译环境VC6++,SDK编写;

1.1加入头文件 #include #include "setupapi.h" #pragma comment(lib,"setupapi") 1.2相关代码实现 //获取串口友好名称friendlyName VOID GetComFriendlyName(HWND hWnd) { DWORD i; CHAR szBuf[256] = { 0 }; TCHAR FriendlyName[256] = { 0 }; //构建系统存在的所有设备列表 HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); if (hDevInfo == INVALID_HANDLE_VALUE) { return; }; //接口参数具体意义,请查看官方文档 https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetclassdevsw SP_DEVINFO_DATA SpDevInfoData = { 0 }; SpDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &SpDevInfoData); i++) { if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &SpDevInfoData, SPDRP_CLASS, NULL, (PBYTE)szBuf, sizeof(szBuf), 0)) { continue; } else { if (strcmp(szBuf, "Ports") != 0) //过滤端口 { continue; } } if (SetupDiGetDeviceRegistryProperty(hDevInfo, &SpDevInfoData, SPDRP_FRIENDLYNAME, NULL, (PBYTE) FriendlyName, sizeof(FriendlyName), 0)) { SendDlgItemMessage(hWnd,IDC_Comm,CB_ADDSTRING,0,(LPARAM) FriendlyName); //向组合框中添加获取的设备友好名称 } } SendDlgItemMessage(hWnd,IDC_Comm,CB_SETCURSEL,0,0); if(hDevInfo) SetupDiDestroyDeviceInfoList(hDevInfo); //释放资源 } 二、增加组合框下拉列表的宽度

在主窗体WndProc中,初始化对话框下,添加一句代码来增加组合框下拉列表的宽度。

case WM_INITDIALOG: { //获取串口友好名称friendlyName GetComFriendlyName(); //增加组合框下拉列表的宽度 SendDlgItemMessage(hWnd,IDC_Comm,CB_SETDROPPEDWIDTH,260,0); } 2.1 未增加组合框下拉列表的宽度效果如下图所示

在这里插入图片描述 从上图中可以看到组合框下拉列表并没有显示全串口设备名称,如果增加组合框宽度使串口设备名称显示全,会增加界面的显示宽度,这样做并不合理。

2.2 增加组合框下拉列表的宽度效果如下图所示

在这里插入图片描述

从上图中可以看出设备友好名称完全被展现出来了,其中就有USB转串口设备CH340,高速USB转串口设备CH343,以及FT232 USB转双串口设备。

三、获取串口号(COMX)

上面已在组合框中加入设备友好名称了,里面就包含了COM端口号。如果要打开串口就要获取COM端口号,下面贴出代码来获取COM端口号。

//打开串口 BOOL OpenUART(HWND hWnd) { INT i,BegainIndex,EndIndex,Len; std::string strTemp,strComName; CHAR buf[256] = ""; CHAR tempBuf[256] = ""; CHAR ComName[16] = ""; //提取设备友好名称中的COM号 GetDlgItemText(hWnd,IDC_Comm,tempBuf,sizeof(tempBuf)); //获取组合框中的字符串 Len =strlen(tempBuf); strTemp = tempBuf; BegainIndex = strTemp.find('('); EndIndex = strTemp.find(')'); for(i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3